package com.leetcode;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

public class L0020 {
    public static void main(String[] args) {
        String s =  "(([]){})";
        System.out.println(isValid(s));
    }
    public static boolean isValid(String s) {
        Map<Character,Integer> map=new HashMap<>();
        Stack<Character> stack = new Stack<Character>();
        map.put('(',1);
        map.put('{',2);
        map.put('[',3);
        map.put(')',-1);
        map.put('}',-2);
        map.put(']',-3);
        if(map.get(s.charAt(0))<0)
            return false;
        for (int i=0;i<s.length();i++){
            if (map.get(s.charAt(i))>0)
                stack.push(s.charAt(i));
            else {
                if (stack.empty()||map.get(stack.pop())+map.get(s.charAt(i))!=0)
                    return false;
            }
        }
        if (stack.empty())
            return true;
        else
            return false;
    }
}
